package com.edisoncgh;

import java.util.Calendar;
import java.util.Collection;
import java.util.Collections;

public class Timer {
    /**
     * 考虑夏令时情况，计算通话时间
     * @param startTime 通话开始时间
     * @param endTime 通话结束时间
     * @return 通话时间
     */
    double calculatePhoneCallTime(Calendar startTime, Calendar endTime) {
//        同在夏令时
        double res = 0;
        if (
                startTime.get(Calendar.MONTH) >= 3 && startTime.get(Calendar.MONTH) <= 11 &&
                        endTime.get(Calendar.MONTH) >= 3 && endTime.get(Calendar.MONTH) <= 11
        ) {
            res = (
                    60 * (endTime.get(Calendar.HOUR) - startTime.get(Calendar.HOUR)) +
                            endTime.get(Calendar.MINUTE) - startTime.get(Calendar.MINUTE)) +
                    (endTime.get(Calendar.SECOND) != startTime.get(Calendar.SECOND) ? 1 : 0
                    );
//            开始时不在夏令时，但结束时在
        } else if (
                startTime.get(Calendar.MONTH) < 3 && startTime.get(Calendar.MONTH) > 11 &&
                        endTime.get(Calendar.MONTH) >= 3 && endTime.get(Calendar.MONTH) <= 11
        ) {
            res = (
                    60 * (endTime.get(Calendar.HOUR) - 1 - startTime.get(Calendar.HOUR)) +
                            endTime.get(Calendar.MINUTE) - startTime.get(Calendar.MINUTE)) +
                    (endTime.get(Calendar.SECOND) != startTime.get(Calendar.SECOND) ? 1 : 0
                    );
//            开始时在夏令时，结束时不在
        } else if (
                startTime.get(Calendar.MONTH) >= 3 && startTime.get(Calendar.MONTH) <= 11 &&
                        endTime.get(Calendar.MONTH) < 3 && endTime.get(Calendar.MONTH) > 11
        ) {
            res = (
                    60 * (endTime.get(Calendar.HOUR) - startTime.get(Calendar.HOUR)) + 1 +
                            endTime.get(Calendar.MINUTE) - startTime.get(Calendar.MINUTE)) +
                    (endTime.get(Calendar.SECOND) != startTime.get(Calendar.SECOND) ? 1 : 0
                    );
//            都不在夏令时
        } else {
            res = (
                    60 * (endTime.get(Calendar.HOUR) - startTime.get(Calendar.HOUR)) +
                            endTime.get(Calendar.MINUTE) - startTime.get(Calendar.MINUTE)) +
                    (endTime.get(Calendar.SECOND) != startTime.get(Calendar.SECOND) ? 1 : 0
                    );
        }

        return res;
    }

    /**
     * 返回通话费用
     * @param startTime 通话开始时间
     * @param endTime 通话结束时间
     * @return 通话费用
     */
    double calculatePhoneCallConsumption(Calendar startTime, Calendar endTime) {
        double timeSpan = calculatePhoneCallTime(startTime, endTime);

        if (timeSpan <= 20) {
            return 0.05 * timeSpan;
        } else {
            return 1.0 + (timeSpan - 20) * 0.1;
        }
    }
}
